iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

JWT(JSON Web Token)是一種輕量且安全的身份驗證方式,廣泛應用於API安全性設計中。本篇將介紹如何在ASP.NET Core中實作JWT認證,確保API的安全訪問。


1. JWT的基本概念

JWT是一個用來在系統之間傳遞安全訊息的開放標準(RFC 7519)。它由三部分組成:頭部(Header)、載荷(Payload)、簽名(Signature),並且是以Base64編碼的方式進行傳遞。JWT通常應用於身份驗證和授權過程中。


2. 安裝JWT的NuGet套件

首先,在ASP.NET Core專案中,我們需要安裝與JWT相關的NuGet套件:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

這個套件提供了JWT的身份驗證處理邏輯。

3. 配置JWT認證

在Startup.cs中,我們需要配置JWT認證的相關設置:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "yourdomain.com",
            ValidAudience = "yourdomain.com",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
        };
    });
    
    services.AddControllers();
}

這段代碼配置了JWT的基本驗證參數,包括發行者(Issuer)、受眾(Audience)以及用於驗證Token的密鑰。

4. 生成JWT Token

接下來,我們需要編寫生成JWT Token的邏輯,通常會放在登入驗證成功後的回應中:

public string GenerateJwtToken(string userName)
{
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, userName),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
    };

    var token = new JwtSecurityToken(
        issuer: "yourdomain.com",
        audience: "yourdomain.com",
        claims: claims,
        expires: DateTime.Now.AddMinutes(30),
        signingCredentials: credentials
    );

    return new JwtSecurityTokenHandler().WriteToken(token);
}

這段代碼用於生成一個有效的JWT Token,並將其回傳給客戶端。

5. 保護API端點

要讓API端點只允許經過JWT認證的用戶訪問,我們可以在控制器或動作方法上添加[Authorize]屬性:

[Authorize]
[HttpGet("secure-data")]
public IActionResult GetSecureData()
{
    return Ok("This is a secured API endpoint");
}

使用這個屬性,未經認證的用戶將無法訪問該API端點。

6. 測試JWT認證

當用戶登錄並獲取JWT Token後,可以將該Token附加到後續的API請求中作為Authorization標頭:

GET /secure-data HTTP/1.1
Host: yourdomain.com
Authorization: Bearer <your-jwt-token>

伺服器會驗證這個Token的有效性,並允許訪問安全的API資源。

7. 小結

JWT為應用提供了一種輕量、安全且靈活的身份驗證方式。在ASP.NET Core中,透過簡單的配置即可輕鬆實作JWT認證,保障API的安全訪問。這樣的認證機制對於保護敏感數據和授權使用者行為至關重要。


上一篇
Day_16 使用SignalR實現即時通訊
下一篇
Day_18 使用Razor Pages建立動態頁面
系列文
ASP.NET Core的終極奧義:從零到無敵30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言